package com.itheima.io1.myzipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author zhangbaiyan
 * @date 2024-09-22 15:30
 * @description:压缩流 压缩多个文件
 * @version:
 */
public class test3 {

    public static void main(String[] args) throws IOException {
        //1.创建File对象表示要压缩的文件夹
        File src = new File("C:\\Users\\17685\\Desktop\\简历");
        //2.创建File 对象表示压缩放在哪里(压缩包的父级路径)
        File destParent = src.getParentFile();
        //3.创建File对象表示压缩包的路径
        File dest = new File(destParent, src.getName() + ".zip");
        //4.创建压缩流关联压缩包
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
        //5.获取src里面的每一个文件,变成ZipEntry对象,放入压缩包当中
        toZip(src,zos, src.getName());
        zos.close();
    }

    public static void toZip(File src, ZipOutputStream zos,String name) throws IOException {
        //1.进入文件夹
        File[] files = src.listFiles();
        //遍历数组
        for (File file : files) {
            if (file.isFile()){
                //3.判断-文件,变成ZipEntry对象,放入到压缩包中
                ZipEntry entry = new ZipEntry(name + "\\" + file.getName());
                zos.putNextEntry(entry);
                //读取二五年间中的数据,写道压缩包
                FileInputStream fis = new FileInputStream(file);
                int b;
                while ((b = fis.read()) != -1) {
                    zos.write(b);
                }
                fis.close();
                zos.closeEntry();
            }else {
                //4.判断-文件夹,递归io
                toZip(file,zos,name + "\\" + file.getName());
            }

        }
    }

}
